home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus 1996 #5 / Amiga Plus CD - 1996 - No. 5.iso / pd / grafik / batchconverter / batchconverter.rexx < prev    next >
OS/2 REXX Batch file  |  1996-05-28  |  15KB  |  523 lines

  1. /* changed getstring to get number. */
  2.  
  3. /*
  4. **      Batchconverter.rexx
  5. **
  6. **      $VER Batchconverter.rexx 1.0 (27 May 1996)
  7. **
  8. **      ©1996 Ramiro Garcia
  9. **
  10. **      This program allows the user to select via requesters:
  11. **
  12. **      A source directory full of pictures to batch process,
  13. **      A destination directory to put them in,
  14. **      and IFF, IFF-HAM, GIF, or JPEG output formats.
  15. **
  16. **      There are also options to control the number of colors
  17. **      in the output IFFs, and the picture quality/compression
  18. **      of the JPEGs.
  19. **
  20. **
  21. */
  22.  
  23.  
  24. /*******************************************************************/
  25. /* Here we set the default number of colors to render in,          */
  26. /* default Vertical Resolution, and other important parameters     */
  27. /*******************************************************************/
  28.  
  29. NUMBER_OF_COLORS=256
  30. HALVE=NO
  31.  
  32. INTERLACED=2
  33. NONINTERLACED=0
  34.  
  35. JPQUAL=32
  36.  
  37. VRES = INTERLACED
  38. TELLRES="NonInterlaced"
  39.  
  40. BITBUCKET=0
  41.  
  42. NL = '0A'X
  43. SQ = '27'X
  44. DQ = '22'X
  45. TRUE  = 1
  46. FALSE = 0
  47.  
  48. HIGHLIGHT_ON ='1B'X||'[0;43;32m'
  49. HIGHLIGHT_OFF ='1B'X||'[0;40;31m'
  50. SYSTEM_ALERT='07'x
  51.  
  52. options results
  53.  
  54. /* trace all */
  55.  
  56. /*******************************************************************/
  57. /* Find ADPro's AREXX port, start ADPro otherwise.                 */
  58. /* You must have "ADPro:" assigned, or ADPro already running       */
  59. /*******************************************************************/
  60.  
  61. SAY "                                            " HIGHLIGHT_ON "If you clicked on the icon"  HIGHLIGHT_OFF
  62. SAY "                                            " HIGHLIGHT_ON "to run BatchIFF, you can"  HIGHLIGHT_OFF
  63. SAY "                                            " HIGHLIGHT_ON "drag this window down to"  HIGHLIGHT_OFF
  64. SAY "                                            " HIGHLIGHT_ON "See some useful messages." HIGHLIGHT_OFF
  65. say ""
  66.  
  67. ADDRESS COMMAND "C:wait 2 secs"
  68.  
  69.  
  70. IF ~SHOW('P','ADPro') THEN DO
  71.                             ADDRESS COMMAND "run < nil: > nil: adpro:adpro MAXMEM=4500000 MINIMIZED LISTINTERFACE NL NS"
  72.  
  73. /* Wait up to 30 secs (10 seconds each line) for ADPro to appear. */
  74.  
  75.                             ADDRESS COMMAND "WAITFORPORT ADPro"
  76.                             ADDRESS COMMAND "WAITFORPORT ADPro"
  77.                             ADDRESS COMMAND "WAITFORPORT ADPro"
  78.                       END
  79.                       ELSE DO
  80.                           address 'ADPro'
  81.                           INTERFACE_SIZE TINY
  82.                           SET_ADPRO_PUBLIC
  83.                           IF ADPRO_RESULT~="Workbench" THEN SET_ADPRO_PUBLIC Workbench
  84.                           say ADPRO_RESULT
  85.                       END
  86.  
  87.  
  88. IF ~SHOW('P','ADPro') THEN DO
  89.         SAY "Could not locate ADPro."
  90.         Call Exit_Routine
  91. END
  92.  
  93. address 'ADPro'
  94.  
  95. version
  96.  
  97. say "ADPro Version="HIGHLIGHT_ON  ADPRO_RESULT HIGHLIGHT_OFF
  98. say "Version must be "HIGHLIGHT_ON "2.5.0 "HIGHLIGHT_OFF "or greater."
  99.  
  100. /*******************************************************************/
  101. /* Select IFF, IFF-HAM, GIF, or JPEG                               */
  102. /*******************************************************************/
  103.  
  104.  
  105. SAY  "Please select IFF, HAM, GIF, or JPEG for your output pictures."
  106.  
  107. /*OKAYN Title                            Text               GadgetLabels */
  108.  
  109. OKAYN '"Output Picture Format"' '"Select the output picture format"',
  110.        "IFF|IFF-HAM|GIF|JPEG"
  111.  
  112.  
  113. IF (RC=0) THEN DO
  114.                   SAVETYPE=JPEG
  115.                   Call JPEG_Quality
  116.                END
  117.  
  118.  
  119. IF (RC=1) THEN DO
  120.                   SAVETYPE=IFF
  121.                   Call How_Many_Colors
  122.                   Call Interlace_mode
  123.                END
  124.  
  125. IF (RC=2) THEN DO
  126.                   SAVETYPE=IFF
  127.                   NUMBER_OF_COLORS=HAM
  128.                   say "The output pictures will be rendered with a "HIGHLIGHT_ON" 4096 color, HAM "HIGHLIGHT_OFF" palette."
  129.                   Call Halve_Horizontal
  130.                   Call Interlace_mode
  131.                END
  132.  
  133.  
  134. IF (RC=3) THEN DO
  135.                   SAVETYPE=GIF
  136.                   NUMBER_OF_COLORS=256
  137.                 END
  138.  
  139. IF (RC>3) THEN Say "A problem has occurred while choosing the file type."
  140.  
  141.  
  142.  
  143. say "The output pictures will be saved as "HIGHLIGHT_ON SAVETYPE HIGHLIGHT_OFF" pictures."
  144.  
  145.  
  146. /*******************************************************************/
  147. /*Select the source directory, with the pictures to be processed.  */
  148. /*******************************************************************/
  149.  
  150.  
  151. PARSE ARG Arguments
  152. PARSE VAR Arguments '"'Title'"' '"'DefaultDir'"' IsRequired
  153.  
  154.  
  155. SAY  "Please select the directory with the pictures to be processed."
  156.  
  157. Title = DQ || "Please select the directory with the source pictures." || DQ
  158.  
  159.  
  160. /* DefaultDir = DQ || DefaultDir || DQ */
  161. DefaultDir = DQ  DQ
  162.  
  163. IsRequired = TRUE
  164.  
  165. continue = TRUE
  166.  
  167. DO WHILE (continue = TRUE)
  168.         ADPRO_TO_FRONT
  169.  
  170.         GETDIR Title DefaultDir
  171.         EnteredDir = ADPRO_RESULT
  172.         IF (RC ~= 0) THEN DO
  173.                 IF (IsRequired = TRUE) THEN DO
  174.                         ADPRO_TO_FRONT
  175.  
  176.                         OKAYN '"GetADir"' '"This value is required."' '"Retry|Cancel"'
  177.                         IF (RC = 0) THEN DO
  178.                                 EnteredDir = DQ || DQ
  179.                                 continue = FALSE
  180.                         END
  181.                 END
  182.                 ELSE DO
  183.                         EnteredDir = DQ || DQ
  184.                         continue = FALSE
  185.                 END
  186.         END
  187.         ELSE
  188.                 continue = FALSE
  189. END
  190.  
  191.  
  192. /* If the user has clicked on the "Cancel" button, or */
  193. /* If the user has clicked on "OK" without selecting anything, then: */
  194.  
  195. IF ((EnteredDir = DQ || DQ)|(EnteredDir = '')) THEN DO
  196.    SAY "You need to select a source directory."
  197.    Call Exit_Routine
  198. END
  199.  
  200.  
  201. Call Check_directory_format
  202.  
  203. SourceDirectory = EnteredDir
  204.  
  205. ADPRO_TO_FRONT
  206.  
  207.  
  208. /*******************************************************************/
  209. /* Select a destination directory for the processed pictures.      */
  210. /*******************************************************************/
  211.  
  212. PARSE ARG Arguments
  213. PARSE VAR Arguments '"'Title'"' '"'DefaultDir'"' IsRequired
  214.  
  215.  
  216. SAY "Please select a different directory for the finished pictures."
  217.  
  218. Title = DQ || "Select a different directory to place the processed pictures." || DQ
  219.  
  220. /* Force the ASL requester to display available volumes. */
  221.  
  222. DefaultDir = DQ  DQ
  223.  
  224. IsRequired = TRUE
  225.  
  226. continue = TRUE
  227.  
  228. DO WHILE (continue = TRUE)
  229.         ADPRO_TO_FRONT
  230.  
  231.         GETDIR Title DefaultDir
  232.         EnteredDir = ADPRO_RESULT
  233.         IF (RC ~= 0) THEN DO
  234.                 IF (IsRequired = TRUE) THEN DO
  235.                         ADPRO_TO_FRONT
  236.  
  237.                         OKAYN '"GetADir"' '"This value is required."' '"Retry|Cancel"'
  238.                         IF (RC = 0) THEN DO
  239.                                 EnteredDir = DQ || DQ
  240.                                 continue = FALSE
  241.                         END
  242.                 END
  243.                 ELSE DO
  244.                         EnteredDir = DQ || DQ
  245.                         continue = FALSE
  246.                 END
  247.         END
  248.         ELSE
  249.                 continue = FALSE
  250. END
  251.  
  252.  
  253. /**
  254.  ** If the user has clicked on the "Cancel" button, or
  255.  ** If the user has clicked on the "OK" button
  256.  ** without selecting anything, then:
  257.  **/
  258.  
  259.  
  260. IF ((EnteredDir = DQ || DQ)|(EnteredDir = '')) THEN DO
  261.    SAY "You need to select a destination directory."
  262.    Call Exit_Routine
  263. END
  264.  
  265. Call Check_directory_format
  266.  
  267. DestinationDirectory = EnteredDir
  268.  
  269. /* Now we have a place to put the pictures. */
  270.  
  271. /* Keep source and destination directories separate. */
  272.  
  273. If (DestinationDirectory = SourceDirectory) THEN DO
  274.    SAY ""
  275.    SAY "The destination directory must be different from the source directory."
  276.    say "Please put the processed pictures someplace other than "HIGHLIGHT_ON SourceDirectory HIGHLIGHT_OFF""
  277.    Call Exit_Routine
  278.    END
  279.  
  280.  
  281. /*******************************************************************/
  282. /* Tell the user what we are about to do, and                      */
  283. /* Give the user a last chance to bail out                         */
  284. /*******************************************************************/
  285.  
  286. /* ADDRESS COMMAND 'ECHO "We will process the following pictures in the *E[0m*E[43;32m'SourceDirectory'*E[0m*E[40;31m directory:"' */
  287. say "We will process the following pictures in the "HIGHLIGHT_ON SourceDirectory HIGHLIGHT_OFF" directory:"
  288.  
  289. /* Enable highlighting */
  290.  
  291. say ""HIGHLIGHT_ON
  292.  
  293. ADDRESS COMMAND 'dir 'DQ||SourceDirectory||"~(pic.list)"||DQ' FILES'
  294.  
  295. /* Disable highlighting */
  296.  
  297. say  HIGHLIGHT_OFF""
  298.  
  299. ADDRESS COMMAND  'list TO T:pic.list 'DQ||SourceDirectory||DQ' P=~(#?.info|pic.list) NOHEAD FILES QUICK'
  300.  
  301. say "And place the processed  pictures in the "HIGHLIGHT_ON DestinationDirectory HIGHLIGHT_OFF" directory."
  302.  
  303. OKAYN '"Ready to Process Pictures"' '"Do you wish to proceed?"' '"Yes|No"'
  304. IF (RC = 0) THEN Call Exit_Routine
  305.  
  306. SAY "Hold on to your Pixels!"
  307.  
  308. /*******************************************************************/
  309. /* Read the list of files, load them, process them, and save them. */
  310. /*******************************************************************/
  311.  
  312. /* Read the list */
  313.  
  314. PIC_LIST = "t:pic.list"
  315.  
  316.  
  317. if OPEN('in' , PIC_LIST , 'r') ~= 1 then do
  318.         okay1 "Could Not Open" PIC_LIST
  319.         Call Exit_Routine
  320. end
  321.  
  322. /* Load the files */
  323.  
  324. AVAIL_MODES_ONLY OFF   /* This allows us to render AGA pics on ECS machine */
  325.  
  326. in_file = READLN('in')
  327.  
  328. /* Test to see if we can touch the first file on the list */
  329.  
  330. IF ~(OPEN('canaryfile',SourceDirectory||in_file,'R')=1) THEN DO
  331.  SAY "I tried to open "SourceDirectory||in_file
  332.  okay1 "Could Not Open" SourceDirectory||in_file
  333.  Call Exit_Routine
  334. END
  335.  
  336. BITBUCKET=CLOSE('canaryfile')
  337.  
  338. /* Try to load the first file on the list into ADPro */
  339.  
  340. do while in_file ~= ""
  341.         lformat "UNIVERSAL"
  342.         load DQ||SourceDirectory||in_file||DQ
  343.         if RC ~= 0 then do
  344.                 okay1 "Could Not Load" SourceDirectory||in_file
  345.                 Call Exit_Routine
  346.         end
  347.  
  348. /* Process and save the pictures */
  349.  
  350.         SFORMAT SAVETYPE
  351.  
  352.         IF (SAVETYPE=JPEG) THEN DO
  353.                    save DQ||DestinationDirectory||in_file||DQ "RAW" JPQUAL
  354.                    END
  355.  
  356.                    ELSE DO
  357.                    screen_type VRES
  358.                    render_type NUMBER_OF_COLORS
  359.                    dither 1
  360.                    IF (HALVE=YES) THEN PCT_SCALE 50 100
  361.                    execute
  362.                    save DQ||DestinationDirectory||in_file||DQ "IMAGE"
  363.                    END
  364.  
  365.         in_file = READLN('in')
  366. end
  367.  
  368. say SYSTEM_ALERT
  369.  
  370. say HIGHLIGHT_ON "All Done!" HIGHLIGHT_OFF
  371.  
  372. okay1 "All Done!"
  373.  
  374. Call Exit_Routine
  375.  
  376. /*******************************************************************/
  377. /* Select the JPEG Quality for the saved pictures.                 */
  378. /*******************************************************************/
  379.  
  380. JPEG_Quality:
  381.  
  382. SAY  "Please select the the JPEG quality for your output pictures."
  383. SAY  "Higher=Better."
  384.  
  385. /*GETNUMBER Title                      Default  Min  Max */
  386.  
  387. GETNUMBER '"Select the JPEG Quality"' JPQUAL    2    1000
  388. IF RC~=0 THEN Call Exit_Routine
  389.  
  390.  JQUAL=ADPRO_RESULT
  391.  
  392. say "The output pictures will have a "HIGHLIGHT_ON JPQUAL HIGHLIGHT_OFF" JPEG Quality."
  393.  
  394.  
  395. RETURN
  396.  
  397. /*******************************************************************/
  398. /* Select the number of colors for the output pictures.            */
  399. /*******************************************************************/
  400.  
  401. How_Many_Colors:
  402.  
  403. SAY  "Please select the number of colors for your output pictures."
  404.  
  405. GETNUMBER '"Enter 2, 4, 8, 16, 32, 64, 128, or 256 Colors"' NUMBER_OF_COLORS
  406.  
  407. IF RC~=0 THEN Call Exit_Routine
  408.  
  409. NUMBER_OF_COLORS=ADPRO_RESULT
  410.  
  411. IF ~((NUMBER_OF_COLORS=  2)|(NUMBER_OF_COLORS=   4)|(NUMBER_OF_COLORS=  8)|,
  412.      (NUMBER_OF_COLORS= 16)|(NUMBER_OF_COLORS=  32)|(NUMBER_OF_COLORS= 64)|,
  413.      (NUMBER_OF_COLORS=128)|(NUMBER_OF_COLORS= 256)|(NUMBER_OF_COLORS=EHB)|,
  414.      (NUMBER_OF_COLORS=HAM)|(NUMBER_OF_COLORS=HAM8)) THEN DO
  415.         SAY "You must enter only one of the following:"
  416.         SAY "2 4 8 16 32 64 18 256"
  417.         SAY "EHB HAM HAM8"
  418.         SAY "With no leading spaces"
  419.         SAY "You picked "HIGHLIGHT_ON NUMBER_OF_COLORS HIGHLIGHT_OFF
  420.         address command 'wait 6 secs'
  421.         Call Exit_Routine
  422. END
  423.  
  424. say "The output pictures will be rendered in "HIGHLIGHT_ON NUMBER_OF_COLORS HIGHLIGHT_OFF" colors."
  425.  
  426. RETURN
  427.  
  428. /*******************************************************************/
  429. /* Select Interlace or NonInterlaced Vertical Resolution           */
  430. /*******************************************************************/
  431.  
  432. Interlace_mode:
  433.  
  434. SAY  "Please select Interlaced or NonInterlaced for your output pictures."
  435.  
  436. /*OKAYN Title                            Text               GadgetLabels */
  437.  
  438. OKAYN '"Interlaced or NonInterlaced?"' '"Select your vertical resolution"',
  439.        "Interlaced|NonInterlaced"
  440.  
  441. IF (RC=0) THEN DO
  442.       VRES=NONINTERLACED
  443.       TELLRES="NonInterlaced"
  444.       END
  445. ELSE DO
  446.       VRES=INTERLACED
  447.       TELLRES="Interlaced"
  448. END
  449.  
  450. say "The output pictures will be rendered in "HIGHLIGHT_ON TELLRES HIGHLIGHT_OFF" mode."
  451.  
  452. RETURN
  453.  
  454. /*******************************************************************/
  455. /* Squeeze the pictures in half horizontally?                      */
  456. /*******************************************************************/
  457.  
  458. Halve_Horizontal:
  459.  
  460. TELLSQUEEZE="not be"
  461.  
  462. SAY  "Would you like the output pictures halved in width?"
  463.  
  464. /*OKAYN Title                            Text               GadgetLabels */
  465.  
  466. OKAYN '"Halve Width?"' '"Shrink the pictures in half horizontally?"',
  467.                         "Shrink|Don't_Shrink"
  468.  
  469. IF ~(RC=0) THEN DO
  470.               HALVE=YES
  471.               TELLSQUEEZE="be"
  472.            END
  473.  
  474.  
  475. say "The output pictures will "HIGHLIGHT_ON TELLSQUEEZE HIGHLIGHT_OFF"  halved."
  476.  
  477. RETURN
  478.  
  479.  
  480. /*******************************************************************/
  481. /* Check for :t, t, ram:t, ram:t/, and process accordingly         */
  482. /*******************************************************************/
  483.  
  484. Check_directory_format:
  485.  
  486. If  (index(EnteredDir,':')=0 | index(EnteredDir,':')=1) then DO
  487.    say ""
  488.    say "The program has aborted."
  489.    say "You must enter an absolute pathname, like ""DH1:pics"","
  490.  
  491.          say "or ""Work:graphics/framestores"", or ""SQ0:""."
  492.          say ""
  493.          say "Entering" '"'EnteredDir'"' "won't work."
  494.          say ""
  495.          say "Try clicking on the ""Volumes"" button in the requester,"
  496.          say "and then selecting the directory you want."
  497.          Call Exit_Routine
  498.          END
  499.  
  500.  
  501. /* If there is not a slash or a colon at the end of the pathname, append a slash */
  502.  
  503. IF   ~(RIGHT(EnteredDir,1)='/' | RIGHT(EnteredDir,1)=':'),
  504.  THEN EnteredDir=EnteredDir||'/'
  505.  
  506. RETURN
  507.  
  508.  
  509. /*******************************************************************/
  510. /* Happy trails, and I hope your picture conversion turned out OK. */
  511. /*******************************************************************/
  512.  
  513. /* This is a line that has been commented out. */
  514.  
  515. Exit_Routine:
  516.  
  517. ADPRO_EXIT
  518.  
  519. address command 'wait 3 secs'
  520.  
  521. EXIT
  522.  
  523. return